package org.example.struct.array2;

import java.util.HashMap;
import java.util.Map;

/**
 * @author liyishan
 * @date 2024/9/10 10:37
 * @apiNote
 */

public class Test02461MaximumSubarraySum {
    public static void main(String[] args) {
        int[] nums = {9,9,9,1,2,3};
        int k = 3;
        long res = maximumSubarraySum(nums, k);
        System.out.println(res);
    }
    public static long maximumSubarraySum(int[] nums, int k) {
        long sum = 0;
        int n = nums.length;
        Map<Integer,Integer> map = new HashMap<>();
        for(int i =0;i<k;i++){
            sum += nums[i];
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
        long max = map.size() == k ? sum:0;
        for(int i =k;i<n;i++){
            sum -= nums[i-k];
            sum += nums[i];
            map.put(nums[i-k],map.get(nums[i-k])-1);
            if(map.get(nums[i-k]) == 0){
                map.remove(nums[i-k]);
            }
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
            if(map.size() == k){
                max = Math.max(max,sum);
            }
        }
        return max;
    }
}
